package menu

import (
	"gitee.com/micro-plat/codeless/apiserver/meta/biz/menu"
	"github.com/micro-plat/hydra"
)

// GetAllMenusHandle 获取所有可用菜单的HTTP处理函数
func GetAllMenusHandle(ctx hydra.IContext) (r interface{}) {
	tenantID := ctx.Request().GetInt("tenant_id")
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// AddMenuHandle 添加菜单的HTTP处理函数
func AddMenuHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("label", "pid"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	label := ctx.Request().GetString("label")
	path := ctx.Request().GetString("path")
	icon := ctx.Request().GetString("icon")
	expand := ctx.Request().GetBool("expand", true)
	pid := ctx.Request().GetInt("pid")

	err := menu.AddMenu(tenantID, label, path, icon, expand, pid)
	if err != nil {
		return err
	}

	// 假设添加后需要重新获取并返回新菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// DeleteMenuHandle 删除菜单的HTTP处理函数
func DeleteMenuHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("id"); err != nil {
		return err
	}
	tenantID := ctx.Request().GetInt("tenant_id")
	id := ctx.Request().GetInt64("id")
	err := menu.DeleteMenu(tenantID, id)
	if err != nil {
		return err
	}

	// 假设删除后需要重新获取并返回剩余菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// UpdateMenuStatusHandle 启用/禁用菜单的HTTP处理函数
func UpdateMenuStatusHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("id", "status"); err != nil {
		return err
	}

	tenantID := ctx.Request().GetInt("tenant_id")
	id := ctx.Request().GetInt64("id")
	status := ctx.Request().GetBool("status")

	err := menu.UpdateMenuStatus(tenantID, id, status)
	if err != nil {
		return err
	}

	// 假设更新状态后需要重新获取并返回菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// UpdateMenuHandle 修改菜单数据的HTTP处理函数
func UpdateMenuHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("id", "label"); err != nil {
		return err
	}

	tenantID := ctx.Request().GetInt("tenant_id")
	id := ctx.Request().GetInt64("id")
	label := ctx.Request().GetString("label")
	path := ctx.Request().GetString("path")
	icon := ctx.Request().GetString("icon")
	expand := ctx.Request().GetBool("expand")

	err := menu.UpdateMenu(tenantID, id, label, path, icon, expand)
	if err != nil {
		return err
	}

	// 假设更新后需要重新获取并返回菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// MoveMenuBackwardHandle 向后移动菜单的HTTP处理函数
func MoveMenuBackwardHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("source_id", "target_id"); err != nil {
		return err
	}

	tenantID := ctx.Request().GetInt("tenant_id")
	sourceID := ctx.Request().GetInt64("source_id")
	targetID := ctx.Request().GetInt64("target_id")

	err := menu.MoveMenuBackward(tenantID, sourceID, targetID)
	if err != nil {
		return err
	}

	// 假设移动后需要重新获取并返回菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus
}

// MoveMenuForwardHandle 向前移动菜单的HTTP处理函数（假设函数名为MoveMenuForwardHandle）
func MoveMenuForwardHandle(ctx hydra.IContext) (r interface{}) {
	if err := ctx.Request().Check("source_id", "target_id"); err != nil {
	}

	tenantID := ctx.Request().GetInt("tenant_id")
	sourceID := ctx.Request().GetInt64("source_id")
	targetID := ctx.Request().GetInt64("target_id")

	// 注意：此处应调用MoveMenuForward函数，但该函数在提供的代码片段中未定义，
	// 假设其实现与MoveMenuBackward类似，只是移动逻辑不同。
	// 由于未提供具体实现，这里仅作为示例保留函数框架，需根据实际情况补充实现。
	err := menu.MoveMenuForward(tenantID, sourceID, targetID)
	if err != nil {
		return err
	}

	// 示例中暂时注释掉实际调用，因为缺乏具体实现。
	// 假设移动后需要重新获取并返回菜单列表（根据实际需求调整）
	menus, err := menu.GetAllMenus(tenantID)
	if err != nil {
		return err
	}
	formattedMenus := menu.FormatMenus(menus)
	return formattedMenus

}
